/*
 * ControleNaoJogo.java
 *
 * Created on 11 de Dezembro de 2006, 16:33
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package magchess10.rn.controle;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;

import javax.swing.JFrame;

import magchess10.ClassesIU.telaCadastro;
import magchess10.ClassesIU.telaLogin;
import magchess10.ClassesIU.telaMesasJogo;
import magchess10.ClassesSO.IConnClient;
import magchess10.rn.bootStrap.Login;
import magchess10.rn.jogador.Jogador;
import magchess10S.ClassesSO.IConnServidor;


/**
 *
 * @author User
 */
public class ControleNaoJogo extends UnicastRemoteObject implements IConnClient{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JFrame c_telaAtual;
    private IConnServidor c_rmiNaoJogo;
    private Jogador c_dadosJogador;
    private boolean c_jogadorPosicionado= false;
    private int c_portaCliente;
    
    public boolean getJogadorPosicionado ()
    {
        return c_jogadorPosicionado;
    }
    public void setJogadorPosicionado (boolean p_valorPosicionado)
    {
        c_jogadorPosicionado = p_valorPosicionado;
    }
    
    
    public ControleNaoJogo() throws RemoteException{
        super();
       try {
          c_rmiNaoJogo = (IConnServidor) Naming.lookup("rmi://127.0.0.1:1099/Servidor");
        } catch (Exception e){
            System.out.println(e.toString());
        }
    }
    
    public void setTelaAtual(JFrame p_telaAtual) {
        c_telaAtual=p_telaAtual;
    }
    
    
    private void criarControleJogo(String [] p_jogadores, int p_tempoJogo) {
        try {
			new ControleJogo(p_jogadores, p_tempoJogo,c_dadosJogador.getNomeJogador(),c_portaCliente);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    
    
    public void RedirecionarTelaMesa() {
        
        JFrame l_proximaTela = new telaMesasJogo(this);
        l_proximaTela.setVisible(true);
        c_telaAtual.setVisible(false);
        setTelaAtual(l_proximaTela);
    }
    
    public void redirecionarTelaJogo(String [] p_jogadores, int p_tempoJogo) {
        criarControleJogo(p_jogadores,p_tempoJogo);
        c_telaAtual.setVisible(false);
        c_telaAtual = null;
    }
    
    public void RedirecionarTelaLogin() {
        
        JFrame l_proximaTela = new telaLogin(this);
        l_proximaTela.setVisible(true);
        if (c_telaAtual !=null)
        c_telaAtual.setVisible(false);
        setTelaAtual(l_proximaTela);
    }
    
    public void RedirecionarTelaCadastro() {
        
        JFrame  l_proximaTela = new telaCadastro(this);
        l_proximaTela.setVisible(true);
        c_telaAtual.setVisible(false);
        setTelaAtual(l_proximaTela);
    }
    
    public void atualizarJogadoresTelaMesa(String [] p_jogadores) {
        telaMesasJogo l_telaAtual = (telaMesasJogo) c_telaAtual;
        l_telaAtual.atualizaListaLugaresDisponiveis(p_jogadores);
    }
    
    public void atualizarTempoTelaMesa(int p_tempoAtual) {
        telaMesasJogo l_telaAtual = (telaMesasJogo) c_telaAtual;
        l_telaAtual.atualizarTempo(p_tempoAtual);
    }
    public String [] getStatusMesa ()
    {
        try
        {
        return c_rmiNaoJogo.getStatusMesa();
        }
        catch (Exception e)
        {System.err.println(e.toString());}
        return null;
    }
    
    public int getTempo ()
    {
         try
        {
        return c_rmiNaoJogo.getTempoMesa();
        }
        catch (Exception e)
        {System.err.println(e.toString());}
        return -15;
    }
    
    public void desconectar() throws RemoteException {
        c_rmiNaoJogo.atualizaJogadoresMesa(0,"");
        c_telaAtual.setVisible(false);
        c_telaAtual = null;
        
    }
    
    public boolean pedirConsultaBD(Login p_login) throws RemoteException {
        return c_rmiNaoJogo.consultarBD(p_login.getApelido(),p_login.getSenha());
    }
    
    public boolean inserirDadosBD(String p_apelido, String p_senha, String p_pNome,String p_uNome , String p_email) throws RemoteException {
        return c_rmiNaoJogo.inserirBD(p_apelido,p_senha,p_pNome,p_uNome , p_email);
    }
    
    
    
  //  private boolean solicitarConsultarMesaCompleta() throws RemoteException {
   //     return   c_rmiNaoJogo..checarMesaCompleta();
    //}
    
    public void setNomeJogador  (String p_nomeJogador) {
        c_dadosJogador = new Jogador(p_nomeJogador);
    }
    public void setCorJogador(String p_CorJogador) {
        c_dadosJogador.setCorJogador(p_CorJogador);
    }
    
    public String getNomeJogador() {
        return c_dadosJogador.getNomeJogador();
    }
    public String getCorJogador() {
        return c_dadosJogador.getCorJogador();
    }
    
    public void atualizaTempoMesa(int p_tempoMesa) throws RemoteException {
        c_rmiNaoJogo.atualizaTempoMesa(p_tempoMesa);
    }
    
    public void solicitarAtualizacaoJogadorMesa(int p_posicaoJogador) throws RemoteException {
        c_rmiNaoJogo.atualizaJogadoresMesa(p_posicaoJogador, c_dadosJogador.getNomeJogador());
    }
    
    private int solicitarPortaAtual ()
    {
       try {
        return c_rmiNaoJogo.getPortaAtual();   
       }
        catch (Exception e)
        {
            System.out.println(e.toString());
        }
       return 1099;
    }
    
    public void registrarCliente() {
        try {
            c_portaCliente = solicitarPortaAtual();
            LocateRegistry.createRegistry(solicitarPortaAtual());
            Naming.rebind("rmi://127.0.0.1:" +  c_portaCliente + "/" + c_dadosJogador.getNomeJogador(), this);
            System.out.println("OK");
            solicitarRegistroClienteServidor ();
        } catch (Exception e){
            System.out.println(e.toString());
            
        }
    }
    
    private void solicitarRegistroClienteServidor ()
    {
        try {
            c_rmiNaoJogo.registrarClienteServidor("127.0.0.1", c_dadosJogador.getNomeJogador());
        }
        catch (Exception e)
        {
            System.err.println(e.toString());
        }
    }
    
    
    public static void main (String [] args)
    {
       try
       {
        ControleNaoJogo c_controleJogo = new ControleNaoJogo (); 
        c_controleJogo.RedirecionarTelaLogin();
       }
       catch (Exception e)
       {
           System.out.println(e.toString());
       }
               
    }
    
    
    
}
